var currentWidget = ""; var reviewsio_modalOpen = false; function reviewsio_slideList(currentWs, direction){ var posElement = document.getElementById('R-ReviewsList--'+currentWs); var elementWidth = document.getElementById('ReviewsList__item--first'+currentWs); try{ if(direction == "right"){ if(posElement.scrollLeft >= (posElement.scrollWidth - posElement.clientWidth) - 1 && posElement.scrollLeft <= (posElement.scrollWidth - posElement.clientWidth) + 1){ posElement.style.scrollBehavior = "auto"; posElement.scrollBy({left: -posElement.scrollWidth, top: 0}); posElement.style.scrollBehavior = "smooth"; }else{ posElement.scrollBy({left: elementWidth.clientWidth, top: 0, behavior: 'smooth'}); } } else{ if(posElement.scrollLeft == 0){ posElement.style.scrollBehavior = "auto"; posElement.scrollBy({left: posElement.scrollWidth - posElement.clientWidth, top: 0}); posElement.style.scrollBehavior = "smooth"; }else{ posElement.scrollBy({left: -elementWidth.clientWidth, top: 0, behavior: 'smooth'}); } } }catch(e){} } var currentPopup; var mobileScrolled; var lastClicked = 0; document.documentElement.addEventListener("touchmove", function(e) {mobileScrolled = true;}) document.documentElement.addEventListener("touchstart", function(e) {mobileScrolled = false;}) document.documentElement.addEventListener("keypress", function(e) { if (e.key === 'Enter') { try{ compare = 4; while(true){ var position = e.composedPath().length - compare; position = e.composedPath()[position]; if(position.classList.contains('CarouselWidget-prefix')){ break; } compare = compare + 1; } var ifModel = e.composedPath().length - 6; ifModel = e.composedPath()[ifModel]; if(!ifModel.classList.contains("js-modal-container")){ tempcurrentWidget = e.composedPath().length - compare +1; tempcurrentWidget = e.composedPath()[tempcurrentWidget].getAttribute('id'); if(tempcurrentWidget != null){ currentWidget = tempcurrentWidget; } } }catch(e){ } if(currentWidget) { if(e.composedPath()[0].classList.contains('js-scroll-left-btn')){ reviewsio_slideList(currentWidget, "left"); } else if(e.composedPath()[0].classList.contains('js-scroll-right-btn')){ reviewsio_slideList(currentWidget, "right"); } else if(e.composedPath()[0].classList.contains('js-open-widgetModal') || e.composedPath()[0].classList.contains('js-model-close-btn')) { e.target.click(); } else if(e.composedPath()[0].hasAttribute('role') && e.composedPath()[0].getAttribute('role') == 'button') { e.target.click(); } } } }); document.documentElement.addEventListener("touchend", function(e) { var d = new Date(); var t = d.getTime(); if(t - lastClicked < 100) { if(mobileScrolled != true){ try{ compare = 4; while(true){ var position = e.composedPath().length - compare; position = e.composedPath()[position]; if(position.classList.contains('CarouselWidget-prefix')){ break; } compare = compare + 1; } var popupElement = e.composedPath().length - compare -6; popupElement = e.composedPath()[popupElement]; try{ var attribute = popupElement.getAttribute('r-popup'); if(attribute != null){ var popup = document.getElementById(attribute); popup.classList.add('isActive'); popup.classList.remove('u-hidden--all'); popup.querySelector('.js-model-close-btn').focus(); reviewsio_trapFocus(popup); try{ var video = document.getElementById(currentPopup+'-video'); video.play(); }catch(f){} reviewsio_modalOpen = true; var remove = []; }else{ var remove = document.getElementsByClassName('js-modal-container'); } }catch(e){ var remove = document.getElementsByClassName('js-modal-container'); } var innerElement = e.composedPath().length - compare - 3; innerElement = e.composedPath()[innerElement]; try{ var ifModel = e.composedPath().length - 6; ifModel = e.composedPath()[ifModel]; if(!ifModel.classList.contains("js-modal-container")){ tempcurrentWidget = e.composedPath().length - compare +1; tempcurrentWidget = e.composedPath()[tempcurrentWidget].getAttribute('id'); if(tempcurrentWidget != null){ currentWidget = tempcurrentWidget; } } }catch(e){} try{ if((e.composedPath()[0].classList.contains('js-close-widgetModal'))||(e.composedPath()[0].classList.contains('js-model-close-btn'))){ for(var i in remove){ reviewsio_modalOpen = false; remove[i].classList.remove('isActive'); remove[i].classList.add('u-hidden--all'); if(currentPopup) { document.querySelector('.R-ReviewsList__item[r-popup='+currentPopup+']').focus(); } try{ var video = document.getElementById(currentPopup+'-video'); video.pause(); }catch(f){} } } }catch(e){} if(e.composedPath()[0].classList.contains('js-scroll-left-btn')){ reviewsio_slideList(currentWidget, "left"); } if(e.composedPath()[0].classList.contains('js-scroll-right-btn')){ reviewsio_slideList(currentWidget, "right"); } }catch(e){} }lastClicked = t; } }); document.documentElement.addEventListener("click", function(e) { var d = new Date(); var t = d.getTime(); lastClicked = t; try{ compare = 4; while(true){ var position = e.composedPath().length - compare; position = e.composedPath()[position]; if(position.classList.contains('CarouselWidget-prefix')){ break; } compare = compare + 1; } var popupElement = e.composedPath().length - compare -6; popupElement = e.composedPath()[popupElement]; var attribute; try{ attribute = popupElement.getAttribute('r-popup'); if(attribute != null){ currentPopup = attribute; var popup = document.getElementById(attribute); popup.classList.add('isActive'); popup.classList.remove('u-hidden--all'); popup.querySelector('.js-model-close-btn').focus(); reviewsio_trapFocus(popup); reviewsio_modalOpen = true; try{ var video = document.getElementById(currentPopup+'-video'); video.play(); }catch(f){} var remove = []; }else{ var remove = document.getElementsByClassName('js-modal-container'); } }catch(e){ var remove = document.getElementsByClassName('js-modal-container'); } var innerElement = e.composedPath().length - compare - 3; innerElement = e.composedPath()[innerElement]; try{ var ifModel = e.composedPath().length - 6; ifModel = e.composedPath()[ifModel]; if(!ifModel.classList.contains("js-modal-container")){ tempcurrentWidget = e.composedPath().length - compare +1; tempcurrentWidget = e.composedPath()[tempcurrentWidget].getAttribute('id'); if(tempcurrentWidget != null){ currentWidget = tempcurrentWidget; } } }catch(e){} try{ if((e.composedPath()[0].classList.contains('js-close-widgetModal'))||(e.composedPath()[0].classList.contains('js-model-close-btn'))){ for(var i in remove){ reviewsio_modalOpen = false; remove[i].classList.remove('isActive'); remove[i].classList.add('u-hidden--all'); if(currentPopup) { document.querySelector('.R-ReviewsList__item[r-popup='+currentPopup+']').focus(); } try{ var video = document.getElementById(currentPopup+'-video'); video.pause(); }catch(f){} } } }catch(e){ } if(e.composedPath()[0].classList.contains('js-scroll-left-btn')){ reviewsio_slideList(currentWidget, "left"); } if(e.composedPath()[0].classList.contains('js-scroll-right-btn')){ reviewsio_slideList(currentWidget, "right"); } }catch(e){} } // } ); var hoverWidget = ""; function reviewsio_mouseStatus(widget){ hoverWidget = widget; } var scrollingWidgets = {}; function reviewsio_createScroll(widget, time){ if(scrollingWidgets[widget] == undefined){ scrollingWidgets[widget] = time; reviewsio_pageScroll(widget); }else{ scrollingWidgets[widget] = time; } } function reviewsio_pageScroll(widget) { if(scrollingWidgets[widget] == false){ var time = 1000; } else{ var time = scrollingWidgets[widget]; } setTimeout(function(){ if(hoverWidget != widget && reviewsio_modalOpen!=true && scrollingWidgets[widget]!=false){ reviewsio_slideList(widget, "right"); } reviewsio_pageScroll(widget); }, time); } try{ $('body').click(function(e) { temp=e.target; while(true){ try{ if(temp.getAttribute( "widget" ) != null &&temp.classList.contains("R-ReviewsList__controlButton")){ if(temp.classList.contains("R-ReviewsList__controlButton--left")){ reviewsio_slideList(temp.getAttribute( "widget" ), "left"); }else if(temp.classList.contains("R-ReviewsList__controlButton--right")){ reviewsio_slideList(temp.getAttribute( "widget" ), "right"); } break; } else if(temp.classList.contains("js-open-widgetModal")){ attribute = temp.getAttribute( "r-popup" ); if(attribute != null){ currentPopup = attribute; var popup = document.getElementById(attribute); popup.classList.add('isActive'); popup.classList.remove('u-hidden--all'); popup.querySelector('.js-model-close-btn').focus(); reviewsio_trapFocus(popup); reviewsio_modalOpen = true; try{ var video = document.getElementById(currentPopup+'-video'); video.play(); }catch(f){} var remove = []; }else{ var remove = document.getElementsByClassName('js-modal-container'); } break; } else if(temp.classList.contains("js-model-close-btn")||temp.classList.contains("js-close-widgetModal")){ $(".js-modal-container").each(function() { $(this).removeClass('isActive'); }); break; } else{ temp = temp.parentElement; } }catch(f){break;} } }); } catch(a){}; function keyEvents(e){ if(e.keyCode == 39){ reviewsio_slideList(currentWidget, "right"); } if(e.keyCode == 37){ reviewsio_slideList(currentWidget, "left"); } //e.preventDefault(); } addEventListener("keydown",keyEvents); if(typeof carouselInlineWidget == 'undefined'){ carouselInlineWidget = function(elementId,opts){ var el = document.getElementById(elementId); var head = document.getElementById('head'); var url = 'https://widget.reviews.io/carousel-inline-iframeless/widget' var queryString = 'elementId=' + elementId + '&version=1&'; userVaribles = reviewsio_keyObject(opts, elementId); setTimeout(function(){ if(typeof html == 'undefined'){ } }, 500); var carouselInlineWidgetListener = function(event){ try { var data = JSON.parse(event.data); if(data.action != undefined){ switch(data.action){ case "resize": if(data.elementId == elementId){ // prevent conflicting widgets frame.height = data.height; } break; } } } catch(e){ } } if (window.addEventListener){ addEventListener("message", carouselInlineWidgetListener, false) } else { attachEvent("onmessage", carouselInlineWidgetListener) } } if (typeof carouselInlineWidgetCallback == 'function') { carouselInlineWidgetCallback(); } } var widgetId = ""; var reviewIndex; function reviewsio_keyObject(req, elementId){ var userVaribles = { api: 'https://api.reviews.io', element_id: elementId, store: 'ecommerce-demo-store', sku: '', carousel_type: 'side_header', styles_carousel: '', options:{ general:{ enable_richsnippets_company: true, enable_richsnippets_product: true, review_type: "store, product, third_party", min_reviews: 5, max_reviews: 20, address_format: "CITY, COUNTRY", enable_auto_scroll: true, }, header:{ enable_overall_stars: true, timeline_difference: 0, logo_url_link: false, enable_logo_url: true, enable_total_reviews: false, }, reviews: { enable_customer_name: true, enable_customer_location: true, enable_verified_badge: true, enable_recommends_badge: true, enable_photos: true, enable_videos: true, enable_review_date: true, disable_same_customer: false, min_review_percent: 3, third_party_source: false, hide_empty_reviews: true, //false is only with image enable_product_name: false, tags: "", branch: "", enable_branch_name: false, enable_avatars: false, }, popups: { enable_review_popups: true, enable_helpful_buttons: true, enable_helpful_count: true, enable_share_buttons: true, }, }, styles:{ }, translations: language(req.lang), } for(var i in req){ if(typeof req[i] != 'object'){ userVaribles[i] = req[i]; } else{ for(var j in req[i]){ if(typeof req[i][j] != 'object'){ userVaribles[i][j] = req[i][j]; } else{ for(var k in req[i][j]){ if(typeof req[i][j][k] != 'object'){ userVaribles[i][j][k] = req[i][j][k]; } } } } } } var rukstyles = '= userVaribles.options.general.min_reviews){ var darkButtons = ""; var reviewsLogo = "https://assets.reviews.io/img/all-global-assets/logo/reviewsio-logo.svg"; var htmls = '
'; htmls += reviewsio_renderHeader(userVaribles, ajaxData); //------------------------------------------------------------------------------------------------------------------------- htmls += '
'+ '
'+ '
'+ ''+ '
'+ '
'+ ''+ '
'+ '
'; htmls += reviewsio_renderContent(userVaribles,ajaxData); htmls += '
'; if(userVaribles.carousel_type == "topHeader"){ htmls+=''; } htmls+= '
'+ '
'; if(userVaribles.options.popups.enable_review_popups){ document.body.insertAdjacentHTML('beforeEnd', reviewsio_renderPopups(userVaribles, ajaxData)); } var RichType = "Organization"; if (userVaribles.review_type == 'product,'){ RichType = 'Product'; } if((userVaribles.sku != "")&&(userVaribles.options.general.enable_richsnippets_product)){ var RichSnippetApiPro = userVaribles.api+'/json-ld/product/richsnippet?sku='+userVaribles.sku+"&store="+userVaribles.store; var RichSnPro = new XMLHttpRequest(); RichSnPro.open('GET', RichSnippetApiPro); RichSnPro.onload = function() { if (RichSnPro.status == 200) { var RichSnippetsProduct = ''; document.body.insertAdjacentHTML('beforeEnd', RichSnippetsProduct); } }; RichSnPro.send(); } if(userVaribles.options.general.enable_richsnippets_company){ var RichSnippetApi = userVaribles.api+'/json-ld/company/snippet?store='+userVaribles.store; var RichSnCo = new XMLHttpRequest(); RichSnCo.open('GET', RichSnippetApi); RichSnCo.onload = function() { if (RichSnCo.status == 200) { var RichSnippets = ''; document.body.insertAdjacentHTML('beforeEnd', RichSnippets); } }; RichSnCo.send(); } htmls += '
'; }else{ htmls = ""; } var html = htmls; return htmls; } function reviewsio_processAjax(userVaribles, ajaxData, dataType){ var obj = ajaxData; var temp = []; var replace = []; var objReview = obj.timeline; if (userVaribles?.options?.reviews?.disable_duplicate_reviews) { objReview = objReview.filter((review, index, self) => { return review._source.comments.length ? index === self.findIndex((compareReview) => ( compareReview._source.comments === review._source.comments && compareReview._source.author === review._source.author )) : true; } ); } for(var i = 0; i< objReview.length; i++){ try{ address = objReview[i]._source.address.split(", "); temp_address = userVaribles.options.general.address_format; if(address.length == 1){ temp_address = ""; }else{ for(var j = 0; j< address.length; j ++){ if(j == 0){ //city if(userVaribles.options.general.address_format.includes("CITY")){ temp_address = temp_address.replace("CITY", address[j]); } } else if(j == 1){ //country if(userVaribles.options.general.address_format.includes("COUNTRY")){ temp_address = temp_address.replace("COUNTRY", address[j]); } } // if(j == 0){ // if(address[j]==""){ // tempa = temp_address.split("COUNTRY"); // temp_address="COUNTRY"+tempa[1]; // }else{ // temp_address = temp_address.replace("CITY", address[j]); // } // } // else if(j == 1){ // if(address[j]==""){ // temp_address = temp_address.replace("COUNTRY", ""); // }else{ // temp_address = temp_address.replace("COUNTRY", address[j]); // } // } } } }catch(e){temp_address = "";} var verified = ""; if(objReview[i]._source.order_id || objReview[i]._source.reviewer_desc === "Verified Buyer" || objReview[i]._source.verified_by === 'author'){ verified = "Verified Buyer"; } var thirdParty = ""; if(objReview[i]._source.source != "Reviews"){ thirdParty = objReview[i]._source.source; } var activeImage = undefined; var activeVideo = undefined; try{ loop = 0; activeImage = []; while(loop < objReview[i]._source.images.length){ if( objReview[i]._source.images[loop].status == "active"){ activeImage.push(objReview[i]._source.images[loop]); } loop += 1; } }catch(e){} try{ if( objReview[i]._source.videos[0].status == "active"){ activeVideo = objReview[i]._source.videos; } }catch(e){} try{ objReview[i]._source.human_date = objReview[i]._source.human_date.replace("minute ago", userVaribles.translations.minute_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("minutes ago", userVaribles.translations.minutes_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("hour ago", userVaribles.translations.hour_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("hours ago", userVaribles.translations.hours_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("day ago", userVaribles.translations.day_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("days ago", userVaribles.translations.days_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("week ago", userVaribles.translations.week_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("weeks ago", userVaribles.translations.weeks_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("month ago", userVaribles.translations.month_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("months ago", userVaribles.translations.months_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("year ago", userVaribles.translations.year_ago); objReview[i]._source.human_date = objReview[i]._source.human_date.replace("years ago", userVaribles.translations.years_ago); if(userVaribles.lang == 'de'){ textString = objReview[i]._source.human_date.split(" "); if(textString[0] != '1'){ objReview[i]._source.human_date = textString[1]+" "+textString[0]+" "+textString[2]; } else{ objReview[i]._source.human_date = textString[1]+" "+textString[2]+" "+textString[3] } } else if(userVaribles.lang == 'fr'){ textString = objReview[i]._source.human_date.split(" "); objReview[i]._source.human_date = textString[1]+" "+textString[2]+" "+textString[3]+" "+textString[0]+" "+textString[4]; } }catch(e){} review = { product_name: objReview[i]._source.product_name, attribute_questions: obj.filters.attributes, attributes: objReview[i]._source.user_attributes, rating: objReview[i]._source.rating, images: activeImage,//objReview[i]._source.images, ratings: objReview[i]._source.ratings, title: objReview[i]._source.review_title, date: objReview[i]._source.human_date, date_created: objReview[i]._source.date_created, votes: objReview[i]._source.helpful, branch: "", //branch: 'Lescter office', comments: objReview[i]._source.comments, store_review_id: objReview[i]._id, third_party: thirdParty, would_recommend: objReview[i]._source.would_recommend_product, tags: objReview[i]._source.tags, videos: objReview[i]._source.videos, responses: objReview[i]._source.responses, reviewer: { first_name: objReview[i]._source.author, verified_buyer: verified,//objReview[i]._source.reviewer_desc, address: temp_address,//objReview[i]._source.address, //profile_piture: objReview.reviewer.profile_piture, //gravatar: objReview.reviewer.gravatar, }, }; try{ try{ review.branch = objReview[i]._source.store_branch.name; }catch(f){ review.branch = objReview[i]._source.store_branch; } // review.branch = objReview[i]._source.store_branch; }catch(e){} if(review.reviewer.first_name == undefined){ review.reviewer.first_name = ""; } if(review.product_name == undefined){ review.product_name = ""; } if(review.branch == null){ review.branch = ""; } if(userVaribles.options.reviews.third_party_source){ if(userVaribles.options.reviews.third_party_source == true){ thirdPartyTesting = review.third_party; }else{ var thirdPartyTesting = userVaribles.options.reviews.third_party_source; } }else{ var thirdPartyTesting = ""; } var hasTags = true; setTagsArray = userVaribles.options.reviews.tags.split(", "); // if( userVaribles.options.reviews.tags){ // hasTags = false; // for(tag in setTagsArray){ // for(revTag in review.tags){ // // console.log(review.tags[revTag].tag) // if(review.tags[revTag].tag.includes(setTagsArray[tag])){ // hasTags = true; // break; // } // } // } // } if(userVaribles.options.reviews.hide_empty_reviews){ var hideEmptyReview = false; if(review.comments == ""){ hideEmptyReview= true; } } else{ var hideEmptyReview = false // if(review.comments == "" && !review.images){ // hideEmptyReview = true; // } } var duplicateReview = false; if(userVaribles.options.reviews.disable_same_customer){ for(var f in temp){ if(f > 0){ var tempReviewerKey = temp[f].reviewer.first_name + temp[f].reviewer.address; var checkReviewerKey = review.reviewer.first_name + review.reviewer.address; if(tempReviewerKey == checkReviewerKey){ duplicateReview = true; } } } } var skipReview = false; if(review != undefined) { if(review.rating < userVaribles.options.reviews.min_review_percent) { skipReview = true; } if(thirdPartyTesting != review.third_party) { skipReview = true; } if(review.third_party == "Trustpilot") { skipReview = true; } if(hideEmptyReview == true) { skipReview = true; } if(duplicateReview == true) { skipReview = true; } if(!hasTags) { skipReview = true; } } else { skipReview = true; } if(!skipReview) { temp.push(review); } if(temp.length == userVaribles.options.general.max_reviews){ break; } } if(totalNumReviews == 0){ totalNumReviews = obj.stats.review_count; } totalNumReviews = totalNumReviews + userVaribles.options.header.timeline_difference; if (userVaribles.options.general.review_type == 'company' || userVaribles.options.header.enable_total_reviews == true){ stats = { total_reviews: obj.storeStats.review_count, average_rating: obj.storeStats.average_rating, }; } else{ stats = { total_reviews: totalNumReviews, average_rating: obj.stats.average_rating, }; } obj.reviews = temp; obj.stats = stats; return obj; } function reviewsio_renderHeader(userVaribles, ajaxData){ var html = ''; var reviewsLogo = "https://assets.reviews.io/img/all-global-assets/logo/reviewsio-logo.svg" var reviewCount = ajaxData.stats.total_reviews; var reviewRating = parseFloat(ajaxData.stats.average_rating).toFixed(2); if(typeof userVaribles.options.header.rating_decimal_places !== 'undefined' && !isNaN(userVaribles.options.header.rating_decimal_places)) { var roundTo = Math.min(Math.max(userVaribles.options.header.rating_decimal_places ?? 1, 1), 2); reviewRating = parseFloat(reviewRating).toFixed(roundTo); } var reviewStars =""; if(userVaribles.options.header.enable_overall_stars){ reviewStars = reviewsio_renderRating(parseFloat(ajaxData.stats.average_rating),userVaribles); } if(reviewRating > 4) { var reviewWord = userVaribles.translations.excellent; } else if(reviewRating > 3) { var reviewWord= userVaribles.translations.good; } else { var reviewWord = userVaribles.translations.normal; } html += '
'+ '
'+ '
'+ '
'+ '
'+ reviewWord+ '
'+ '
'; if(userVaribles.carousel_type != "topHeader"){ html += (userVaribles.options.header.enable_overall_stars?'
'+ ''+ '
':"")+ '
'+ '
'+ ''+reviewsio_formatReviewStat(reviewRating, userVaribles.lang)+' '+userVaribles.translations.rating+ '
'+ '
'+ '
'+ '
'+ ''+reviewsio_formatReviewStat(reviewCount, userVaribles.lang)+' '+userVaribles.translations.reviews+ '
'+ '
'+ '
'; html+=''+ ''+ '
'; } else{ html += (userVaribles.options.header.enable_overall_stars?'
'+ ''+ '
':"")+ '
'+ '
'+ '
'+ ' '+" "+reviewsio_formatReviewStat(reviewRating, userVaribles.lang)+' '+userVaribles.translations.based_on+' '+ '
'+ '
'+ '
'+ '
'+ ''+reviewsio_formatReviewStat(reviewCount, userVaribles.lang)+' '+userVaribles.translations.reviews+ '
'+ '
'+ '
'; } html+= '
'+ '
'; return html; } var reviewIndex; function reviewsio_renderContent(userVaribles, ajaxData){ var html = ''; reviewIndex = 0; for(var review in ajaxData.reviews){ if(!isNaN(review)){ html += reviewsio_renderReview(ajaxData.reviews[review],userVaribles); } } return html; } function reviewsio_renderReview(review, userVaribles ){ var numberedDatesSetting = userVaribles.NUMERED_DATES; if(numberedDatesSetting == 'true') { var d = new Date(review.date_created); function pad(s) { return (s < 10) ? '0' + s : s; }; var formattedDate = [pad(d.getDate()), pad(d.getMonth()+1), d.getFullYear()].join('.'); } //If reviwer name is anonymous, use the translation config if(review.reviewer && review.reviewer.first_name != null && review.reviewer.first_name.toLowerCase() == 'anonymous') { review.reviewer.first_name = userVaribles.TRANSLATE_ANONYMOUS; } if(userVaribles.THIRD_PARTY){ var iconName = review.third_party.name.replace(" ", "-").toLowerCase();; var iconUrl = 'https://assets.reviews.io/img/all-global-assets/platform-logos/icon-'+iconName+'--black.svg'; if(userVaribles.DARKMODE == 'true'){ iconUrl = 'https://assets.reviews.io/img/all-global-assets/platform-logos/icon-'+iconName+'--white.svg'; } } else{ if(reviewIndex == 0){ var html= '
'; } else{ var html= '
'; } html += '
'+ '
'+ '
'+ (userVaribles.options.reviews.enable_customer_name?'
'+ (review.reviewer? ('
' + (review.reviewer.first_name != null? review.reviewer.first_name : userVaribles.translations.anonymous) + ' ' + (review.reviewer.last_name != null? review.reviewer.last_name : '') + '
') : '' )+ (review.first_name? ('
' + (review.first_name != null? review.first_name : userVaribles.translations.anonymous) + ' ' + (review.last_name != null? review.last_name : '') + '
') : '' )+ '
':"")+ //(review.header.enable_overall_stars? '
'+ ''+ '
'+//:"")+ '
'; try{ if (review.tags.find(t => t.tag === 'Subscriber') && userVaribles.options.reviews.enable_subscriber_badge){ html += '
'+ ''+ '
'+ '
'+ userVaribles.translations.verified_subscriber+ '
'+ '
'+ '
'; } else if ((review.reviewer.verified_buyer == "Verified Buyer")&&(userVaribles.options.reviews.enable_verified_badge)){ html += '
'+ ''+ '
'+ '
'+ userVaribles.translations.verified_customer+ '
'+ '
'+ '
'; } }catch(error){} if(userVaribles.styles_carousel == "CarouselWidget--topHeader--titles") { html += '
'+ '
'; try{ html+=review.title; }catch(e){} html+='
'+ '
'+ '
'; } else { html += '
'+ (userVaribles.options.reviews.enable_product_name?'
'+review.product_name+'
':"")+ '
'; try{ html+=reviewsio_escapeHtmlEntities(review.comments); }catch(e){} html+='
'+ (review.would_recommend && userVaribles.options.reviews.enable_recommends_badge ? '
'+ ''+ '
'+ '
'+ userVaribles.translations.would_recommend+ '
'+ '
'+ '
':"")+ '
'+ '
'; } html += '
'+ '
'; try{ if(review.videos[0] && review.videos[0].status == 'active' && userVaribles.options.reviews.enable_videos){ html+='
'+ '
'+ 'Review image'+ '
'+ ''+ '
'+ '
'+ '
'; } else if(review.images[0] && userVaribles.options.reviews.enable_photos){ html += '
'+ ''+ '
'; } }catch(e){} html += '
'+ '
'; if(userVaribles.options.reviews.enable_branch_name){ html+=''+review.branch+''; } if(review.third_party != ""){ html+=' '+userVaribles.translations.source+': '+review.third_party+''; } html += '
'; if (userVaribles.options.reviews.enable_customer_location) { try{ if(review.reviewer.address !=""){ var dateFromPost = review.reviewer.address; html += dateFromPost; if((userVaribles.options.reviews.enable_review_date)){ html += ', '; } } }catch(e){}; } if (userVaribles.options.reviews.enable_review_date) { try{ if(review.image){ var dateFromPost = review.human_readable_date; }else{ var dateFromPost = review.date; } html += dateFromPost; }catch(e){}; } html +='
'; } html += '
'+ '
'+ '
'+ '
'; reviewIndex ++; return html; } function reviewsio_renderRating(rating, userVaribles){ var html = ''; for(var i=1;i<=5;i++){ if(i <= rating){ html += ''; } else if(i - 0.25 <= rating) { html += ''; } else if(i - 0.5 <= rating) { html += ''; } else if(i - 0.75 <= rating) { html += ''; } else { html += ''; } } return html; } function reviewsio_renderPopups(userVaribles, ajaxData){ var html = '
'; for(var review in ajaxData.reviews){ if(!isNaN(review)){ try{ if((ajaxData.reviews[review].images[0] && userVaribles.options.reviews.enable_photos) || (ajaxData.reviews[review].videos.length >= 1) && userVaribles.options.reviews.enable_videos){ // try{ html += '
' + reviewsio_generateImagePopup(ajaxData.reviews[review],userVaribles) + '
'; // }catch(f){} } else{ // try{ html += '
' + reviewsio_generatePopup(ajaxData.reviews[review],userVaribles) + '
'; // }catch(f){} } }catch(e){ // try{ html += '
' + reviewsio_generatePopup(ajaxData.reviews[review],userVaribles) + '
'; // }catch(f){} } } } html +='
'; return html; } function reviewsio_generateImagePopup( review, userVaribles){ var html = ""+ '
'+ '
'+ ''+ '
'; return html; } function reviewsio_generatePopup(review,userVaribles){ var html = ""+ '
'+ '
'+ ''+ '
'; return html; } window.onload = function () { setTimeout(function(){ if ('ResizeObserver' in self) { var ro = new ResizeObserver(function(entries) { var defaultBreakpoints = {'R-XSM': 380, 'R-SM': 480, 'R-MD': 640, 'R-LG': 767, 'R-XLG': 992, 'R-XXLG': 1140, 'R-XXXLG': 1440,'R-XXXXLG': 1919}; entries.forEach(function(entry) { var breakpoints = entry.target.dataset.breakpoints ? JSON.parse(entry.target.dataset.breakpoints) : defaultBreakpoints; Object.keys(breakpoints).forEach(function(breakpoint) { var minWidth = breakpoints[breakpoint]; if (entry.contentRect.width <= minWidth) { if(breakpoint != 0){ entry.target.classList.remove(breakpoints[breakpoint-1]) } entry.target.classList.add(breakpoint) } else { entry.target.classList.remove(breakpoint); } }); }); }); var elements = document.querySelectorAll('[r-data-observe-resizes]'); for (var element, i = 0; element = elements[i]; i++) { ro.observe(element); } } }, 301); } function reviewsio_resizer(){ if ('ResizeObserver' in self) { var ro = new ResizeObserver(function(entries) { var defaultBreakpoints = {'R-XSM': 380, 'R-SM': 480, 'R-MD': 640, 'R-LG': 767, 'R-XLG': 992, 'R-XXLG': 1140, 'R-XXXLG': 1440,'R-XXXXLG': 1919}; entries.forEach(function(entry) { var breakpoints = entry.target.dataset.breakpoints ? JSON.parse(entry.target.dataset.breakpoints) : defaultBreakpoints; Object.keys(breakpoints).forEach(function(breakpoint) { var minWidth = breakpoints[breakpoint]; if (entry.contentRect.width <= minWidth) { if(breakpoint != 0){ entry.target.classList.remove(breakpoints[breakpoint-1]) } entry.target.classList.add(breakpoint) } else { entry.target.classList.remove(breakpoint); } }); }); }); var elements = document.querySelectorAll('[r-data-observe-resizes]'); for (var element, i = 0; element = elements[i]; i++) { ro.observe(element); } } } function reviewsio_shareLink(store, type, id) { id = id.split('-'); var link = ''; switch (id[0]) { case 'product_review': if(type == 'twitter'){ link = 'https://twitter.com/intent/tweet?url=https://media.reviews.co.uk/product-snippet/' + id[1]; } else if(type =='facebook') { link = 'https://www.facebook.com/dialog/share?app_id=2171894026402210&display=popup&href=https://media.reviews.co.uk/product-snippet/' + id[1]; } else if (type == 'email') { return 'mailto:?subject=Check out this review&body=https://media.reviews.co.uk/product-snippet/' + id[1]; } break; case 'store_review': if(type == 'twitter'){ link = 'https://twitter.com/intent/tweet?url=https://www.reviews.io/company-review/store/'+ store +'/' + id[1]; } else if(type =='facebook') { link = 'https://www.facebook.com/dialog/share?app_id=2171894026402210&display=popup&href=https://www.reviews.io/company-review/store/'+ store +'/' + id[1]; } else if (type == 'email') { return 'mailto:?subject=Check out this review&body=https://www.reviews.io/company-review/store/'+ store +'/' + id[1]; } break; } if(link) { window.open(link,'targetWindow','toolbar=no,location=0,status=no,menubar=no,scrollbars=yes,resizable=yes,width=640,height=480'); } } function reviewsio_generatePopupReplyContent(responses){ if (typeof responses === 'undefined' || responses.length < 1) { return ''; } const replyHTML = []; responses.forEach((res)=>{ if (res.comments && !res.private){ let responseItem = ''; responseItem += '
Reply:
'; responseItem += '
' + res.comments + '
'; replyHTML.push(responseItem); } }); if (replyHTML.length > 0){ return replyHTML.join(''); } } function elementOrAncestorHasClass(element, className) { if (!element || element.length === 0) { return false; } var parent = element; do { if (parent === document) { break; } if (parent.className.indexOf(className) >= 0) { return true; } } while (parent = parent.parentNode); return false; } function reviewsio_hasVoted(id) { if(localStorage.getItem(id+'/helpful')) { return localStorage.getItem(id+'/helpful'); } else { return false; } } function reviewsio_vote(store, id, vote, existingVoteCount,string){ var idParts = id.split('-'); if (!localStorage.getItem(id+'/helpful') && vote){ localStorage.setItem(id+'/helpful', 'up'); var elm = document.getElementById('vote_notice-'+id); var optsElm = document.getElementById('vote_options-'+id); elm.innerHTML = reviewsio_getVotedHtml('up',string); optsElm.style.display = 'none'; switch (idParts[0]) { case 'store_review': var url = userVaribles.api + '/merchant/vote?store='+ store +'&review_id='+ idParts[1]; break; case 'product_review': var url = userVaribles.api + '/product/vote?store='+ store +'&product_review_id='+ idParts[1]; break; } var xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.onload = function() { if (xhr.status === 200) { ajaxData = JSON.parse(xhr.responseText); if(ajaxData.success == true) { if(existingVoteCount > 0) { var countElm = document.getElementById('vote_count-'+id); countElm.innerHTML = ajaxData.count; } else { var countElm = document.getElementById('vote_up_container-'+id); countElm.innerHTML = reviewsio_getVoteCountHtml(id, ajaxData.count); } } } else { } }; xhr.send(); } else if(!localStorage.getItem(id+'/helpful') && !vote) { localStorage.setItem(id+'/helpful', 'down'); var elm = document.getElementById('vote_notice-'+id); var optsElm = document.getElementById('vote_options-'+id); elm.innerHTML = reviewsio_getVotedHtml('down',string); optsElm.style.display = 'none'; } } function reviewsio_getVoteCountHtml(storeReviewId, votes) { var html = '
'+ '
'+ ''+ '
'+ ''+ ''+votes+" "+ (votes > 1 ? userVaribles.translations.helpful_multiple : userVaribles.translations.helpful_single) + ' '+ '
'; return html; } function reviewsio_decodeJsonStringArray(a) { if(a.indexOf('["') !== -1) { try { var attributeAnswer = JSON.parse(a); return attributeAnswer.join(', '); } catch (e) { return a; } } else { return a; } } function reviewsio_getVotedHtml(vote,string) { var html = ''; if(vote == 'up' || vote == true) { var html = '
' + '
' + '' + '
' + (string ? string : userVaribles.translations.up_voted) + '
' + '
'+ '
'; } else if(vote == 'down') { var html = '
' + '
' + '' + '
' + (string ? string : userVaribles.translations.down_voted) + '
' + '
'+ '
'; } return html; } function reviewsio_renderAllCenteredSelects(attributes) { var html = ''; for (var i = 0; i < attributes.length; i++) { if(attributes[i].attribute && attributes[i].attribute.type && attributes[i].attribute.type == 'centered-range') { html += '
' + '
' + (attributes[i].attribute.public_label.length > 0 ? attributes[i].attribute.public_label : attributes[i].attribute.question) + '
' + '
' + '
' + '
'+ '
'+ '
'; var sliderLabels = reviewsio_getSliderLabels(attributes[i].attribute.data); for (var sliderIndex = 0; sliderIndex < sliderLabels.length; sliderIndex++) { if(sliderLabels[sliderIndex] == null) { continue; } html += '
' + '
' + (sliderLabels[sliderIndex]) + '
' + '
'; } html += '
'+ '
'; } } return html; } function reviewio_getRatingPercentile(rating) { rating = (parseInt(rating) / 5) * 5; return Math.round((100/4)*rating) - 25; } function reviewsio_getSliderLabels(labels) { try { var parsedlabels = JSON.parse(labels); return parsedlabels; } catch (e) { return labels; } } function reviewsio_escapeHtmlEntities(review_comments){ if (!review_comments) return review_comments; return review_comments.replace(//g, ''); } function language(lan){ var translations; switch(lan){ case 'fr': translations = { rating: "moyenne", stars: "étoiles", share: "Partager", read_more: "Lire plus de commentaires sur REVIEWS.io", close: "Proche", share_facebook: "Partager sur Facebook", share_twitter: "Partager sur Twitter", share_email: "Partager par e-mail", reviews: "commentaires", excellent: "Excellent", good: "Bien", normal: "Ordinaire", anonymous: "Anonyme", verified_customer: "Client Vérifié", based_on: "basé sur", would_recommend: "Je recommande ce produit", helpful_multiple: "les gens ont trouvé cet avis utile.", helpful_single: "personne a trouvé ce commentaire utile.", up_voted: "Vous avez noté cet avis comme utile.", down_voted: 'Vous avez rejeté cet avis.', was_helpful:'Cet avis vous a-t-il été utile?', yes:'Oui', no:'Non', minute_ago:'Il y a minute', minutes_ago:'Il y a minutes', hour_ago:'Il ya a heure', hours_ago:'Il y a heures', day_ago:'Il y a jour', days_ago:'Il y a jours', week_ago:'Il y a semaine', weeks_ago:'Il y a semaines', month_ago:'Il y a mois', months_ago:'Il y a mois', year_ago: 'il y a an', years_ago:'il y a ans', source: 'La source', }; break; case 'de': translations = { rating: "Rating", stars: "Sterne", reviews: "Bewertungen", share: "Teilen", read_more: "Lesen Sie weitere Bewertungen auf REVIEWS.io", close: "Schließen", share_facebook: "Auf Facebook teilen", share_twitter: "Auf Twitter teilen", share_email: "Per E-Mail teilen", excellent: "Hervorragend", good: "Gut", normal: "Akzeptabel", anonymous: "Anonym", verified_customer: "Verifizierter Kunde", based_on: "basierend auf", would_recommend: "Ich empfehle dieses Produkt", helpful_multiple: "Personen fanden diese Bewertung hilfreich.", helpful_single: "Person fand diese Bewertung hilfreich.", up_voted: "Sie haben diese Bewertung als hilfreich markiert.", down_voted: 'Sie haben diese Bewertung als nicht hilfreich markiert.', was_helpful: 'War diese Bewertung hilfreich?', yes:'Ja', no:'Nein', minute_ago:'vor einer Minute', minutes_ago:'vor Minuten', hour_ago:'vor einer Stunde', hours_ago:'vor Stunden', day_ago:'vor einem Tag', days_ago:'vor Tagen', week_ago:'vor einer Woche', weeks_ago:'vor Wochen', month_ago:'vor einem Monat', months_ago:'vor Monaten', year_ago: 'vor einem Jahr', years_ago:'vor Jahren', source: 'Quelle', }; break; case 'no': translations = { rating: "Anmeldelse", reviews: "Vurderinger", excellent: "Glimrende", good: "Bra", normal: "Ok", anonymous: "Anonym", verified_customer: "Verifisert kunde", based_on: "basert på", would_recommend: "Jeg anbefaler dette produktet", helpful_multiple: "personer synes denne vurderingen var nyttig.", helpful_single: "person synes denne vurderingen var nyttig.", up_voted: "Du har markert anmeldelsen som nyttig.", down_voted: 'Du har markert anmeldelsen som unyttig.', was_helpful: 'Var denne anmeldelsen nyttig?', yes:'Ja', no:'Nei', minute_ago:'minutt siden', minutes_ago:'minutter siden', hour_ago:'time siden', hours_ago:'timer siden', day_ago:'dag siden', days_ago:'dager siden', week_ago:'uke siden', weeks_ago:'uker siden', month_ago:'måned siden', months_ago:'måneder siden', }; break; case 'es': translations = { rating: 'calificación', reviews: 'reseñas', share: "Cuota", read_more: "Lea más reseñas en REVIEWS.io", close: "Cerrar", share_facebook: "Compartir en Facebook", share_twitter: "Compartir en Twitter", share_email: "Compartir via correo electrónico", stars: "estrellas", excellent: 'Excelente', good: 'Bien', normal: 'Normal', anonymous: 'anónimo', verified_customer: 'Cliente Verificado', based_on: 'basado en', would_recommend: 'recomendaría', helpful_multiple: 'útil múltiple', helpful_single: 'útil sólo', up_voted: 'votado', down_voted: 'votado bajo', was_helpful: 'fue útil', yes: 'si', no: 'no', minute_ago: 'hace un minuto', minutes_ago: 'hace minutos', hour_ago: 'hace una hora', hours_ago: 'horas atras', day_ago: 'hace un dia', days_ago: 'hace días', week_ago: 'hace una semana', weeks_ago: 'hace semanas', month_ago: 'hace un mes', months_ago: 'Hace meses', year_ago: 'Year ago', years_ago:'Years ago', source: 'origen', }; break; case "it": translations = { rating: "Valutazioni", stars: "stelle", share: "Condividere", read_more: "Leggi altre recensioni su REVIEWS.io", close: "Chiudere", share_facebook: "Condividi su Facebook", share_twitter: " Condividi su Twitter", share_email: "Condividi via e-mail", reviews: "Recensioni", excellent: "Eccezionale", good: "Bene", normal: "Ordinario", anonymous: "Anonimo", verified_customer: "Cliente verificato", based_on: "basato su", would_recommend: "Consiglierei questo prodotto", helpful_multiple: "persone hanno trovato utile questa recensione.", helpful_single: "persone hanno trovato utile questa recensione.", up_voted: "Hai valutato questa recensione come utile.", down_voted: "Hai valutato questa recensione come inutile.", was_helpful: "Questa recensione è stata utile per te?", yes: "Sì", no: "No", minute_ago: "minuto fa", minutes_ago: "minuti fa", hour_ago: "ora fa", hours_ago: "ore fa", day_ago: "giorno fa", days_ago: "giorni fa", week_ago: "settimana fa", weeks_ago: "settimane fa", month_ago: "mesa fa", months_ago: "mesi fa", year_ago: "ano fa", years_ago: "ani fa", source: "Fonte", }; break; case "nl": translations = { rating: "Beoordeling", reviews: "Recensies", share: "Delen", read_more: "Lees meer recensies op REVIEWS.io", close: "Sluiten", share_facebook: "Delen op Facebook", share_twitter: "Delen op Twitter", share_email: "Delen via e-mail", stars: "sterren", excellent: "Uitstekend", good: "Goed", normal: "Normaal", anonymous: "Anoniem", verified_customer: "Geverifieerde klant", based_on: "Gebaseerd op", would_recommend: "Zou dit product aanbevelen", helpful_multiple: "mensen hebben deze recensie gevonden nuttig.", helpful_single: "mensen hebben deze recensie gevonden nuttig.", up_voted: "Je hebt deze recensie als nuttig gegeven.", down_voted: "Je hebt deze recensie als niet nuttig gegeven.", was_helpful: "Was deze recensie nuttig?", yes: "Ja", no: "Nee", minute_ago: "minuut geleden", minutes_ago: "minuten geleden", hour_ago: "uur geleden", hours_ago: "uren geleden", day_ago: "dag geleden", days_ago: "dagen geleden", week_ago: "week geleden", weeks_ago: "weken geleden", month_ago: "maand geleden", months_ago: "maanden geleden", year_ago: "jaar geleden", years_ago: "jaren geleden", source: "Bron", }; break; case "sv": translations = { rating: "Betyg", reviews: "Recensioner", share: "Dela", read_more: "Läs fler recensioner på REVIEWS.io", close: "Stäng", share_facebook: "Dela på Facebook", share_twitter: "Dela på Twitter", share_email: "Dela via e-mail", stars: "stjärnor", excellent: "Utmärkt", good: "Bra", normal: "Normal", anonymous: "Anonym", verified_customer: "Verifierad kund", based_on: "Baserat på", would_recommend: "Jag skulle rekommendera detta produkt", helpful_multiple: "personer har hittat denna recension användbar.", helpful_single: "personer har hittat denna recension användbar.", up_voted: "Du har röstat på denna recension som användbar.", down_voted: "Du har röstat på denna recension som inte användbar.", was_helpful: "Var denna recension användbar?", yes: "Ja", no: "Nej", minute_ago: "minut sedan", minutes_ago: "minuter sedan", hour_ago: "timme sedan", hours_ago: "timmar sedan", day_ago: "dag sedan", days_ago: "dagar sedan", week_ago: "vecka sedan", weeks_ago: "veckor sedan", month_ago: "månad sedan", months_ago: "månader sedan", year_ago: "år sedan", years_ago: "år sedan", source: "Källa", }; break; case "pt": translations = { rating: "média", reviews: "avaliações", share: "Compartilhar", close: "Fechar", read_more: "Leia mais avaliações em REVIEWS.io", share_facebook: "Compartilhar no Facebook", share_twitter: "Compartilhar no Twitter", share_email: "Compartilhar via Email", stars: "Estrelas", excellent: "Excelente", good: "Bom", normal: "Normal", anonymous: "Anônimo", verified_customer: "Cliente Verificado", verified_subscriber: "Assinante Verificado", based_on: "com base em", would_recommend: "Eu recomendo este produto", helpful_multiple: "pessoas acharam esta avaliação útil.", helpful_single: "pessoa achou esta avaliação útil.", up_voted: 'Você votou positivamente nesta avaliação como útil.', down_voted: 'Você votou negativamente nesta avaliação.', was_helpful: 'Esta avaliação foi útil?', yes: 'Sim', no: 'Não', minute_ago: 'minuto atrás', minutes_ago: 'minutos atrás', hour_ago: 'hora atrás', hours_ago: 'horas atrás', day_ago: 'dia atrás', days_ago: 'dias atrás', week_ago: 'semana atrás', weeks_ago: 'semanas atrás', month_ago: 'mês atrás', months_ago: 'meses atrás', year_ago: 'ano atrás', years_ago: 'anos atrás', source: 'Fonte', }; break; default: translations = { rating: "average", reviews: "reviews", share: "Share", close: "Close", read_more: "Read more reviews on REVIEWS.io", share_facebook: "Share on Facebook", share_twitter: "Share on Twitter", share_email: "Share via Email", stars: "Stars", excellent: "Excellent", good: "Good", normal: "Normal", anonymous: "Anonymous", verified_customer: "Verified Customer", verified_subscriber: "Verified Subscriber", based_on: "based on", would_recommend: "I recommend this product", helpful_multiple: "people found this review helpful.", helpful_single: "person found this review helpful.", up_voted: 'You've upvoted this review as helpful.', down_voted: 'You've downvoted this review.', was_helpful:'Was this review helpful?', yes: 'Yes', no: 'No', minute_ago:'minute ago', minutes_ago:'minutes ago', hour_ago:'hour ago', hours_ago:'hours ago', day_ago:'day ago', days_ago:'days ago', week_ago:'week ago', weeks_ago:'weeks ago', month_ago:'month ago', months_ago:'months ago', year_ago: 'year ago', years_ago:'years ago', source: 'Source', }; break; } return translations; }